/*
 *  borne.h
 *  Ray Tracing
 *
 *  Borne un double entre min et max
 *
 *  Created by Jean-Marc Comby + Romain Dequesne on Tue Mar 30 2004.
 *  Copyright (c) 2004. All rights reserved.
 *
 */
#ifndef BORNE_HPP
#define BORNE_HPP

#include <algorithm>

/**
 * Fonction servant à s'assurer qu'une valeur est bien entre un
 * minimum et un maximum.
 *
 * La version de MM Jean-Marc Comby et Romain Dequesne comportait 2
 * fonctions, auxquelles il aurait encore fallu ajouter au minimum une
 * troisième. J'en ai fait un template, ce qui simplifie beaucoup la
 * maintenance du code.
 *
 * @param x valeur que l'on veut borner.
 * @param inf borne inférieure.
 * @param sup borne supérieure.
 * @return une référence sur x si x se trouve bien dans l'intervalle
 * voulu, une référence sur inf si x est trop petit ou encore une
 * référence sur sup si x est trop grand.
 *
 * @author Johan "Solo" Luisier
 *
 * @date 2010
 */
template< class T >
const T& borne(const T& x, const T& inf, const T& sup)
{
  return std::max( std::min( x, sup ), inf );
}

#endif // BORNE_HPP
